
#include <multimedia/imagem/Gaussian.h>


static const int gaussianMask[][5] = {{ 2, 4, 5, 4, 2},
                                      { 4, 9,12, 9, 4},
                                      { 5,12,15,12, 5},
                                      { 4, 9,12, 9, 4},
                                      { 2, 4, 5, 4, 2}};


void GaussianFilter(Imagem& img)
{
    Imagem destino(img.Largura(), img.Altura(),0,0);
    
    for(int i=2; i<img.Largura()-2; i++)
        for(int j=2; j<img.Altura()-2; j++)
        {
            int pixelR = 0;
            int pixelG = 0;
            int pixelB = 0;
            for(int p=-2; p<=2; p++)
                for(int q=-2; q<=2; q++)
                {
                    pixelR += (BANDA_R(img[i+p][j+q]) * gaussianMask[p][q]);
                    pixelG += (BANDA_G(img[i+p][j+q]) * gaussianMask[p][q]);
                    pixelB += (BANDA_B(img[i+p][j+q]) * gaussianMask[p][q]);
                }
            destino[i][j] = RGBA(pixelR/159, pixelG/159, pixelB/159, BANDA_A(img[i][j]));
        }

    img = destino;
}

